Java™ is a cross-platform programming language used to develop applications particularly well suited to run in an Internet browser, or as a stand-alone application program that runs on a local machine operating system. Java™ programs are typically operating system independent, meaning they may be executed on a number of different operating systems including, for example, Microsoft Windows®, Linux, Netware, Mac OS, etc. The ability to execute on a number of different operating systems has lead to an increase in the number of applications developed in the Java™ language. Thus, the effective management of computer resources allocated to the execution of Java™ applications has increased in importance.
When operating in the Windows® environment, it is often desirable to execute certain Java™ applications as a background Windows® service. A Windows® service is a program, routine, or process that performs a specific system function to support other programs, particularly at a low (close to the hardware) level (e.g., the Security Accounts Manager service, the file replication service, or the routing and remote access service). A Java™ application, however, cannot be run as a Windows® service directly. In order to run the Java™ application as a Windows® service, the Java™ Software Developers Kit (SDK) provides a Java™ Native Interface library so that a C or C++ Windows® service application may be written to invoke the Application Programming Interfaces (APIs) necessary to execute a Java™ Virtual Machine (JVM) to load the Java™ application at the low level desired.
As will be readily appreciated, a great deal of time and knowledge is required in order to write a C or C++ Windows® service application. For example, a programmer must be familiar not only with Java, but also C or C++ and more importantly, a number of Windows® APIs. In addition, the programmer must be familiar enough with Windows® so as to set specific system environment variables, such as the CLASSPATH environment variable, to allow the Java™ application to operate properly. Moreover, a single virtual machine must be invoked for each Java™ application initiated, quickly leading to degradation in system performance and memory capacity.